﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;

namespace itau.imnk.transcritor
{
    public class EmailSender
    {
        private string _assunto;
        private string _remetente;
        private IList<string> _destinatarios;
        private string _servidorSMTP;
        private string _mensagem;

        private Queue<string> _filaMensagens;

        public EmailSender(string servidorSMTP, string assunto, string mensagem, string remetente, IList<string> destinatarios)
        {
            _filaMensagens = new Queue<string>();

            _servidorSMTP = servidorSMTP;
            _assunto = assunto;
            _mensagem = mensagem;
            _remetente = remetente;
            _destinatarios = destinatarios;
        }

        public void AdicionarLinhaMensagem(string mensagem)
        {
            _filaMensagens.Enqueue(mensagem);
        }

        public void EnviarEmail()
        {
            if (_filaMensagens.Count > 0)
            {
                using (MailMessage mailMessage = new MailMessage())
                {
                    if (_destinatarios != null && _destinatarios.Count() > 0)
                    {
                        foreach (string destinatario in _destinatarios)
                        {
                            mailMessage.To.Add(new MailAddress(destinatario));
                        }
                    }
                    else
                    {
                        throw new Exception("A lista de destinatários não deve ser nula ou vazia");
                    }

                    mailMessage.From = new MailAddress(_remetente);
                    mailMessage.Subject = _assunto;
                    mailMessage.IsBodyHtml = true;
                    mailMessage.Body = FormatarMensagemEmail(_mensagem);

                    SmtpClient smtpClient = new SmtpClient(_servidorSMTP);
                    smtpClient.Send(mailMessage);
                }
            }
        }

        private string FormatarMensagemEmail(string mensagemPrincipal)
        {
            StringBuilder mensagem = new StringBuilder();
            mensagem.Append(@"<font size='2' face='Arial'>
                                   <i><b>Não responda este E-Mail. </b>E-Mail automático enviado pelo processo de transcrição das curvas do NK para o IM.</i>");
            mensagem.Append("<br>");
            mensagem.Append(mensagemPrincipal);
            mensagem.Append("<br>");

            while(_filaMensagens.Count > 0)
            {
                mensagem.Append("<br>");
                mensagem.Append(_filaMensagens.Dequeue());
            }

            mensagem.Append("</font>");

            return mensagem.ToString();
        }
    }
}
